 
4.1 R语言基础
4.2 基于ggplot2的数据可视化
 
 
 
|  | 
 
# 安装: https://cloud.r-project.org/
# 对象 object
x <- 1
name <- "小明"
y = 2
# 运算符
+, -, *, /, ^
# 常用函数
sqrt, exp, log, log10, log2
round, floor, ceiling
# 自定义函数
my_add <- function(x,y){x+y}
# 读写 I/O:
# I: read.table, read.csv, read.delim
# O: print, cat, write
# 数据类型: 逻辑型, 字符串, 数字 ...
TRUE, FALS, T, F
"abc", "123", "@!@#$#$%#$^#$%&$%^&"
123, 1e-5, 3.1415926
# 数据结构: 向量, 矩阵, 列表, 数据框 ...
# 向量
v1 <- 1:10
v1 + 100  # 四则运算自动广播
v1 * 2
v2 <- 21:30
v2 - v1   # 等长向量可进行四则运算
# 向量的下标和子集
v1[2]
v1[c(1,3)]
v1[3:5]
v1[c(-1,-10)]
v1[v1>5] # 逻辑下标
# 矩阵: 二维向量
# 列表: 火车
# 数据框 dataframe
d <- data.frame(
    name=c("李明", "张聪", "王建"), 
    age=c(30, 35, 28), 
    height=c(180, 162, 175),
    stringsAsFactors=FALSE
)
##   name age height
## 1 李明  30    180
## 2 张聪  35    162
## 3 王建  28    175
# 流程控制
## 判断
if(CONDITION1){
    EXPR1
}else if(CONDITION2){
    EXPR2
}else{
    EXPR3
}
ifelse(CONDITION, EXPR-TRUE, EXPR-FALSE) # ? : 
## 循环
for(i in 1:5){
    # do sth...
}
while(CONDITION){
    # do sth...
}
repeat{
    # do sth...
    if(CONDITION){break}
}
# 基本统计函数
min, max, median, sd, quantile
# 基本统计检验
t.test
wilcox.test
cor.test
chisq.test
# 聚类分析
kmeans
hclust, dist 
 
 
 
 
 
 
 
 
 
 
 
|   | 
|  折线图: geomline, geomabline, geomhline, geomvline |   | 
|  柱形图: geombar, geomcol, stat_count |   | 
|  热图: geombin2d, geomtile, geomhex, geom_raster |   | 
|  箱线图: geom_boxplot |   | 
|  轮廓图: geomcontour, geomcontour_filled |   | 
|  密度图: geomdensity, geomdensity2d, geomdensity2dfilled |   | 
|  散点图: geompoint, geomdotplot, geom_jitter |   | 
|  区间图: geomcrossbar, geomerrorbar, geomlinerange, geompointrange |   | 
|  地图: geom_map |   | 
|  路径图: geompath, geomstep |   | 
|  多边形图: geomrect, geompolygon |   | 
|  条带和范围: geomribbon, geomarea, geom_smooth |   | 
|  线段和曲线: geomsegment, geomcurve |   | 
|  文字: geomtext, geomlabel |   | 
|  小提琴图: geom_violin |   | 
 
|     Gui, S., Wei, W., et al.  A pan-Zea genome map for enhancing maize improvement. Genome Biol 23, 178 (2022).  |   | 
 
|  好的数据, 好的展现形式, 好的审美  用尽可能少的元素表示尽可能多的数据 
 | 
 
|   帕尔默企鹅数据集: 嘴巴越长的企鹅,嘴巴也会越厚么?  |     | 
 
|   |  学生A: "破案了! 喙厚度和喙长度成反比, 说明嘴短的企鹅, 嘴更厚, 与原假设相反! 毕业! 能毕业了~!"  学生B: "发表! 必须马上发表! 我昨天帮你带饭了, 给我个共一不过份吧?"  老师: "你俩再延一年吧🙂" | 
  
 
# 感觉有点不对劲, 但又说不上来:
ggplot(penguins,aes(x = bill_depth_mm, y = bill_length_mm)) +
    geom_point() + 
    geom_smooth(method="lm") + 
    theme_bw(base_size=18)
# 这下舒服了:
ggplot(penguins,aes(x = bill_depth_mm, y = bill_length_mm, color = species)) + 
    geom_point() + 
    geom_smooth(method="lm") + 
    theme_bw(base_size=18)
# 加亿点点细节
ggplot(penguins, # 选择x轴,y轴数据映射, 以及颜色映射
            aes(x = bill_depth_mm,
                y = bill_length_mm,
                color = species)) + 
    geom_point(size=4,alpha=0.7) + # 点的大小和透明度
    geom_smooth(method="lm") + # 线性回归拟合
    scale_color_brewer(palette="Dark2") + # 配色方案
    labs(x = "Bill depth (mm)",   # x轴标题
         y = "Bill length (mm)",  # y轴标题
         title = "Flipper and bill length correlation" # 总标题
         ) + 
    theme_bw(base_size=18) + # 纯白主题, 总字体大小
    theme(legend.position=c(0.1, 0.15)) # 图列位置